"""
什么是模块
1. 容器 -> 数据的封装
2. 函数 -> 语句的封装
3. 类 -> 方法和属性的封装
4. 模块 -> 程序文件
"""

"""
命名空间
命名空间因为对象的不同，也有所区别，可以分为如下几种：
1. 内置命名空间（Built-in Namespaces）：Python 运行起来，它们就存在了。内置函数的命名空间都属于内置命名空
间，所以，我们可以在任何程序中直接运行它们，比如 id() ,不需要做什么操作，拿过来就直接使用了。
# hello.py
def hi():
 print('Hi everyone, I love lsgogroup!')
1
2
3
141
2. 全局命名空间（Module：Global Namespaces）：每个模块创建它自己所拥有的全局命名空间，不同模块的全局命名空
间彼此独立，不同模块中相同名称的命名空间，也会因为模块的不同而不相互干扰。
3. 本地命名空间（Function & Class：Local Namespaces）：模块中有函数或者类，每个函数或者类所定义的命名空间就
是本地命名空间。如果函数返回了结果或者抛出异常，则本地命名空间也结束了。
上述三种命名空间的关系
"""

"""
导入模块
"""


# 创建一个模块 TemperatureConversion.py
# TemperatureConversion.py
def c2f(cel):
    fah = cel * 1.8 + 32
    return fah


def f2c(fah):
    cel = (fah - 32) / 1.8
    return cel


# 第一种：import 模块名

# import TemperatureConversion

# print('32摄氏度 = %.2f华氏度' % TemperatureConversion.c2f(32))
# print('99华氏度 = %.2f摄氏度' % TemperatureConversion.f2c(99))
# 32摄氏度 = 89.60华氏度
# 99华氏度 = 37.22摄氏度


# 第二种：from 模块名 import 函数名
# from TemperatureConversion import c2f, f2c
# print('32摄氏度 = %.2f华氏度' % c2f(32))
# print('99华氏度 = %.2f摄氏度' % f2c(99))

# 方式不推荐  from TemperatureConversion import *


# 第三种：import 模块名 as 新名字
# import TemperatureConversion as tc


"""
if __name__ == '__main__'
对于很多编程语言来说，程序都必须要有一个入口，而 Python 则不同，它属于脚本语言，不像编译型语言那样先将程序
编译成二进制再运行，而是动态的逐行解释运行。也就是从脚本第一行开始运行，没有统一的入口。
"""
# 假设我们有一个  文件，内容如下：
# const.py
PI = 3.14


def main():
    print("PI:", PI)


main()
#
# 我们看到 const.py 中的 main 函数也被运行了，实际上我们不希望它被运行，因为 const.py 提供的 main 函数只是为了测试
# 常量定义。这时 if __name__ == '__main__' 派上了用场，我们把 const.py 改一下，添


"""
当解释器遇到 import 语句，如果模块在当前的搜索路径就会被导入。
"""
# import sys
# print(sys.path)
